<?php
    class Arquivo
    {
        private $arquivo;
        private $funcoes;
        private $numfunc;
        private $retorno;
        private $indice;
        public function __construct($arquivo)
        {
            $this->numfunc = 0;
            $uploaddir = '/home/projetos/anaweb/anaweb/anaweb/sci/programas/';
            $uploadfile = $uploaddir . basename($arquivo['arquivo']['name']);
            if (move_uploaded_file($arquivo['arquivo']['tmp_name'], $uploadfile)) {
?>
                <p>Arquivo enviado com sucesso!</p>

<?php
                $this->arquivo = $uploadfile;
                $this->pegaFuncoes();
?>
                <form action="gauss.php" method="get" name="funcao">
                    <p>Selecione a fun&ccedil;&atilde;o que calcular&aacute; o sistema, no seguinte formato:<br/>
                        <span class="menor">
                        1&ordm; par&acirc;metro - Matriz de coeficientes<br/>
                        2&ordm; par&acirc;metro - Vetor de termos independentes<br/>
                        Retorno - Vetor solu&ccedil;&atilde;o<br/></span>
                    <select name="indicefuncao">
<?php
                    for ($i=0; $i < count($this->funcoes); $i++)
                    {
?>
                        <option value="<?php echo $i ?>"><?php echo $this->funcoes[$i] ?></option>
<?php
                    }
?>
                    </select>
                    </p>
                    <input type="submit" value="Enviar">
                </form>
<?php
                $_SESSION['CORRECAO'] = $this;
            } else {
                echo "Possible file upload attack!\n";
            }
        }
        public function setIndice($indice)
        {
            $this->indice = $indice;
        }
        public function getArquivo()
        {
            return $this->arquivo;
        }
        public function getFuncao()
        {
            $funcao = $this->funcoes[$this->indice];
            $j = 0;
            $str = '';
            for ($i = 0; $i < strlen($funcao); $i++)
            {
                if ($funcao[$i] == '(')
                {
                    return implode($str);
                }
                $str[$j++] = $funcao[$i];
            }
        }
        public function pegaFuncoes()
        {
            $arquivo = fopen($this->arquivo,"r");
            while (!feof($arquivo))
                $var=@$var.fread($arquivo,1024);
            fclose($arquivo);

            for ($i = 0; $i < strlen($var); $i++)
            {
                if ($var[$i] == 'f' && substr($var,$i+1,7) == "unction" && $var[$i-1] != 'd')
                {
                    $i +=8;
                    $j = $d = '';
                    while ($var[$i] != ')' && $i < strlen($var))
                    {
                        while ($var[$i] == ' ') $i++;
                        if ($var[$i] == '[')
                        {
                            while ($var[$i] != ']')
                            {
                                $d[$j++] = $var[$i++];
                            }
                            $d[$j++]=$var[$i++];
                        }
                        elseif ($var[$i] == '=')
                        {
                            $i++;
                            $r = $d;
                            $d = $j = '';
                        }
                        elseif ($var[$i] != ')')
                        {
                            $d[$j++] = $var[$i++];
                        }
                    }
                    $this->funcoes[$this->numfunc++] = implode($d).")";
                    if (!empty($r))
                    {
                        $this->retorno[$this->numfunc-1] = implode($r);
                    }
                }
            }
        }
    }
?>